home *** CD-ROM | disk | FTP | other *** search
/ Enter 2006 October / Enter 10 2006.iso / boot / isolinux / initrd / in / dev / makedevs.sh
Encoding:
Linux/UNIX/POSIX Shell Script  |  2003-09-02  |  6.9 KB  |  261 lines

  1. #!/bin/sh
  2. # This script makes /dev entries for hard drives listed in /proc/partitions.
  3. # Written by Patrick Volkerding, licensed under the GPL (any version).
  4. # Copyright 2001, 2002  Slackware Linux, Inc., Concord, CA
  5.  
  6. # Many thanks to Vincent Rivellino for contributing the patches to support
  7. # Mylex and Compaq RAID controllers.
  8.  
  9. # Devfs enabled kernels don't use the old familiar device names in
  10. # /proc/partitions, so we need to be able to figure them out on the
  11. # basis of only the major/minor numbers.  This will require some
  12. # maintainance for a while, but we expect to require devfs soon enough,
  13. # and that will help generalize the installation to new types of
  14. # devices without requiring fixes from us.
  15.  
  16. # Also, we're not yet ready to install with devfs _mounted_, so don't
  17. # try that. :)
  18.  
  19. # Main loop:
  20. # First, determine if we are using old or new device names.  The old format
  21. # will never contain a '/'  (Well, some RAID controllers could have them,
  22. # but luckily we can handle those in the same way)
  23.  
  24. # Make a device:
  25. makedev() {
  26.   if [ ! -b $1 ]; then
  27.     mknod $1 b $2 $3
  28.     chown root.disk $1
  29.     chmod 640 $1
  30.   fi  
  31. }
  32.  
  33. # Make ide device
  34. # makeide major minor hd1 hd2 (2 base devs for major)
  35. make_ide() {
  36.   # Handle base devices:
  37.   if [ "$2" = "0" ]; then
  38.     makedev /dev/$3 $1 $2
  39.     return 0
  40.   elif [ "$2" = "64" ]; then
  41.     makedev /dev/$4 $1 $2
  42.     return 0
  43.   fi
  44.   # Must be a partition:
  45.   if [ "`expr $2 / 64`" = "0" ]; then
  46.     DEV=$3
  47.     NUM=$2
  48.   else
  49.     DEV=$4
  50.     NUM=`expr $2 - 64`
  51.   fi
  52.   makedev /dev/$DEV$NUM $1 $2
  53. }
  54.  
  55. # Make SCSI device
  56. make_scsi() {
  57.   # find drive # 0 - 15
  58.   DRV=`expr $1 / 16`
  59.   NUM=`expr $1 % 16`
  60.   if [ "$NUM" = "0" ]; then
  61.     NUM=""
  62.   fi
  63.   if [ "$DRV" = "0" ]; then
  64.     makedev /dev/sda$NUM 8 $1
  65.   elif [ "$DRV" = "1" ]; then
  66.     makedev /dev/sdb$NUM 8 $1
  67.   elif [ "$DRV" = "2" ]; then
  68.     makedev /dev/sdc$NUM 8 $1
  69.   elif [ "$DRV" = "3" ]; then
  70.     makedev /dev/sdd$NUM 8 $1
  71.   elif [ "$DRV" = "4" ]; then
  72.     makedev /dev/sde$NUM 8 $1
  73.   elif [ "$DRV" = "5" ]; then
  74.     makedev /dev/sdf$NUM 8 $1
  75.   elif [ "$DRV" = "6" ]; then
  76.     makedev /dev/sdg$NUM 8 $1
  77.   elif [ "$DRV" = "7" ]; then
  78.     makedev /dev/sdh$NUM 8 $1
  79.   elif [ "$DRV" = "8" ]; then
  80.     makedev /dev/sdi$NUM 8 $1
  81.   elif [ "$DRV" = "9" ]; then
  82.     makedev /dev/sdj$NUM 8 $1
  83.   elif [ "$DRV" = "10" ]; then
  84.     makedev /dev/sdk$NUM 8 $1
  85.   elif [ "$DRV" = "11" ]; then
  86.     makedev /dev/sdl$NUM 8 $1
  87.   elif [ "$DRV" = "12" ]; then
  88.     makedev /dev/sdm$NUM 8 $1
  89.   elif [ "$DRV" = "13" ]; then
  90.     makedev /dev/sdn$NUM 8 $1
  91.   elif [ "$DRV" = "14" ]; then
  92.     makedev /dev/sdo$NUM 8 $1
  93.   elif [ "$DRV" = "15" ]; then
  94.     makedev /dev/sdp$NUM 8 $1
  95.   fi
  96. }
  97.  
  98. # Make Mylex RAID device
  99. make_rd() {
  100.   if [ ! -d /dev/rd ]; then
  101.     mkdir /dev/rd
  102.   fi
  103.   # find drive
  104.   DRV=`expr $3 / 8`
  105.   NUM="p`expr $3 % 8`"
  106.   if [ "$NUM" = "p0" ]; then
  107.     NUM=""
  108.   fi
  109.   makedev /dev/rd/c$1d$DRV$NUM $2 $3
  110. }
  111.  
  112. # Make Cpq SMART/2 RAID device
  113. make_ida() {
  114.   if [ ! -d /dev/ida ]; then
  115.     mkdir /dev/ida
  116.   fi
  117.   # find drive
  118.   DRV=`expr $3 / 16`
  119.   NUM="p`expr $3 % 16`"
  120.   if [ "$NUM" = "p0" ]; then
  121.     NUM=""
  122.   fi
  123.   makedev /dev/ida/c$1d$DRV$NUM $2 $3
  124. }
  125.  
  126. # Make Compaq Next Generation RAID device
  127. make_cciss() {
  128.   if [ ! -d /dev/cciss ]; then
  129.     mkdir /dev/cciss
  130.   fi
  131.   # find drive
  132.   DRV=`expr $3 / 16`
  133.   NUM="p`expr $3 % 16`"
  134.   if [ "$NUM" = "p0" ]; then
  135.     NUM=""
  136.   fi
  137.   makedev /dev/cciss/c$1d$DRV$NUM $2 $3
  138. }
  139.  
  140. # Make ATA RAID device
  141. make_ataraid() {
  142.   if [ ! -d /dev/ataraid ]; then
  143.      mkdir /dev/ataraid
  144.   fi
  145.   # find drive
  146.   DRV=`expr $2 / 16`
  147.   NUM=`expr $2 % 16`
  148.   if [ "$NUM" = "0" ]; then
  149.      makedev /dev/ataraid/d$DRV $1 $2
  150.   else
  151.      makedev /dev/ataraid/d${DRV}p$NUM $1 $2
  152.   fi
  153. }
  154.  
  155.  
  156. # Make AMI HyperRAID device:
  157. make_amiraid() {
  158.   if [ ! -d /dev/amiraid ]; then
  159.      mkdir /dev/amiraid
  160.   fi
  161.   # find drive
  162.   DRV=`expr $2 / 16`
  163.   NUM=`expr $2 % 16`
  164.   if [ "$NUM" = "0" ]; then
  165.      makedev /dev/amiraid/ar$DRV $1 $2
  166.   else
  167.      makedev /dev/amiraid/ar${DRV}p$NUM $1 $2
  168.   fi
  169. }
  170.  
  171. if cat /proc/partitions | grep / 1> /dev/null 2> /dev/null ; then # new
  172.   cat /proc/partitions | grep / | while read line ; do
  173.     SMASHED_LINE=$line
  174.     MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
  175.     MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
  176.     if [ "$MAJOR" = "3" ]; then
  177.       make_ide $MAJOR $MINOR hda hdb
  178.     elif [ "$MAJOR" = "8" ]; then
  179.       make_scsi $MINOR
  180.     elif [ "$MAJOR" = "22" ]; then
  181.       make_ide $MAJOR $MINOR hdc hdd
  182.     elif [ "$MAJOR" = "33" ]; then
  183.       make_ide $MAJOR $MINOR hde hdf
  184.     elif [ "$MAJOR" = "34" ]; then
  185.       make_ide $MAJOR $MINOR hdg hdh
  186.     elif [ "$MAJOR" = "48" ]; then
  187.       make_rd 0 $MAJOR $MINOR
  188.     elif [ "$MAJOR" = "49" ]; then
  189.       make_rd 1 $MAJOR $MINOR
  190.     elif [ "$MAJOR" = "50" ]; then
  191.       make_rd 2 $MAJOR $MINOR
  192.     elif [ "$MAJOR" = "51" ]; then
  193.       make_rd 3 $MAJOR $MINOR
  194.     elif [ "$MAJOR" = "52" ]; then
  195.       make_rd 4 $MAJOR $MINOR
  196.     elif [ "$MAJOR" = "53" ]; then
  197.       make_rd 5 $MAJOR $MINOR
  198.     elif [ "$MAJOR" = "54" ]; then
  199.       make_rd 6 $MAJOR $MINOR
  200.     elif [ "$MAJOR" = "55" ]; then
  201.       make_rd 7 $MAJOR $MINOR
  202.     elif [ "$MAJOR" = "56" ]; then
  203.       make_ide $MAJOR $MINOR hdi hdj
  204.     elif [ "$MAJOR" = "57" ]; then
  205.       make_ide $MAJOR $MINOR hdk hdl
  206.     elif [ "$MAJOR" = "72" ]; then
  207.       make_ida 0 $MAJOR $MINOR
  208.     elif [ "$MAJOR" = "73" ]; then
  209.       make_ida 1 $MAJOR $MINOR
  210.     elif [ "$MAJOR" = "74" ]; then
  211.       make_ida 2 $MAJOR $MINOR
  212.     elif [ "$MAJOR" = "75" ]; then
  213.       make_ida 3 $MAJOR $MINOR
  214.     elif [ "$MAJOR" = "76" ]; then
  215.       make_ida 4 $MAJOR $MINOR
  216.     elif [ "$MAJOR" = "77" ]; then
  217.       make_ida 5 $MAJOR $MINOR
  218.     elif [ "$MAJOR" = "78" ]; then
  219.       make_ida 6 $MAJOR $MINOR
  220.     elif [ "$MAJOR" = "79" ]; then
  221.       make_ida 7 $MAJOR $MINOR
  222.     elif [ "$MAJOR" = "88" ]; then
  223.       make_ide $MAJOR $MINOR hdm hdn
  224.     elif [ "$MAJOR" = "89" ]; then
  225.       make_ide $MAJOR $MINOR hdo hdp
  226.     elif [ "$MAJOR" = "90" ]; then
  227.       make_ide $MAJOR $MINOR hdq hdr
  228.     elif [ "$MAJOR" = "91" ]; then
  229.       make_ide $MAJOR $MINOR hds hdt
  230.     elif [ "$MAJOR" = "101" ]; then
  231.       make_amiraid $MAJOR $MINOR
  232.     elif [ "$MAJOR" = "104" ]; then
  233.       make_cciss 0 $MAJOR $MINOR
  234.     elif [ "$MAJOR" = "105" ]; then
  235.       make_cciss 1 $MAJOR $MINOR
  236.     elif [ "$MAJOR" = "106" ]; then
  237.       make_cciss 2 $MAJOR $MINOR
  238.     elif [ "$MAJOR" = "107" ]; then
  239.       make_cciss 3 $MAJOR $MINOR
  240.     elif [ "$MAJOR" = "108" ]; then
  241.       make_cciss 4 $MAJOR $MINOR
  242.     elif [ "$MAJOR" = "109" ]; then
  243.       make_cciss 5 $MAJOR $MINOR
  244.     elif [ "$MAJOR" = "110" ]; then
  245.       make_cciss 6 $MAJOR $MINOR
  246.     elif [ "$MAJOR" = "111" ]; then
  247.       make_cciss 7 $MAJOR $MINOR
  248.     elif [ "$MAJOR" = "114" ]; then
  249.       make_ataraid $MAJOR $MINOR
  250.     fi
  251.   done
  252. else # old format
  253.   cat /proc/partitions | grep d | while read line ; do
  254.     SMASHED_LINE=$line
  255.     MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
  256.     MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
  257.     DEVNAME=`echo $SMASHED_LINE | cut -f 4 -d ' '`
  258.     makedev /dev/$DEVNAME $MAJOR $MINOR
  259.   done
  260. fi
  261.